home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / prosrc.arc / RCLIB.C < prev    next >
C/C++ Source or Header  |  1986-10-12  |  6KB  |  248 lines

  1. /*------------------------------*/
  2. /*    includes        */
  3. /*------------------------------*/
  4.  
  5. #include "portab.h"                /* portable coding conv    */
  6. #include "machine.h"                /* machine depndnt conv    */
  7. #include "obdefs.h"                /* object definitions    */
  8. #include "gembind.h"                /* gem binding structs    */
  9. #include "taddr.h"
  10. #include "rsconv.h"
  11.  
  12.  
  13. /*------------------------------*/
  14. /*    defines            */
  15. /*------------------------------*/
  16.  
  17. #define    NIL        -1
  18. #define DESK        0
  19. #define    ARROW        0
  20. #define    HOUR_GLASS    2            
  21. #define END_UPDATE    0
  22. #define    BEG_UPDATE    1
  23.  
  24. #define TE_PTEXT(x)    (x)
  25. #define TE_TXTLEN(x)     ((x) + 24)
  26.  
  27. /*------------------------------*/
  28. /*    do_obj            */
  29. /*------------------------------*/
  30.     VOID
  31. do_obj(tree, which, bit)    /* set specified bit in object state    */
  32.     OBJECT    *tree;
  33.     WORD    which, bit;
  34.     {
  35.     (tree + which)->ob_state |= bit;
  36.     }
  37.  
  38.  
  39. /*------------------------------*/
  40. /*    undo_obj        */
  41. /*------------------------------*/
  42.     VOID
  43. undo_obj(tree, which, bit)    /* clear specified bit in object state    */
  44.     OBJECT    *tree;
  45.     WORD    which, bit;
  46.     {
  47.     (tree + which)->ob_state &= (~bit);
  48.     }
  49.  
  50. /*------------------------------*/
  51. /*    sel_obj            */
  52. /*------------------------------*/
  53.     WORD
  54. sel_obj(tree, which)
  55.     OBJECT    *tree;
  56.     WORD    which;
  57.     {
  58.     do_obj(tree, which, SELECTED);
  59.     return (TRUE);
  60.     }
  61.  
  62. /*------------------------------*/
  63. /*    desel_obj        */
  64. /*------------------------------*/
  65.     WORD
  66. desel_obj(tree, which)
  67.     OBJECT    *tree;
  68.     WORD    which;
  69.     {
  70.     undo_obj(tree, which, SELECTED);
  71.     return (TRUE);
  72.     }
  73.  
  74. /*------------------------------*/
  75. /*    disab_obj        */
  76. /*------------------------------*/
  77.     WORD
  78. disab_obj(tree, obj)
  79.     OBJECT    *tree;
  80.     WORD    obj;
  81.     {
  82.     undo_obj(tree, obj, DISABLED);
  83.     return (TRUE);
  84.     }
  85.  
  86. /*------------------------------*/
  87. /*    objc_xywh        */
  88. /*------------------------------*/
  89.     VOID
  90. objc_xywh(tree, obj, p)
  91.     OBJECT    *tree;
  92.     WORD    obj;
  93.     GRECT    *p;
  94.     {
  95.     objc_offset(tree, obj, &p->g_x, &p->g_y);
  96.     p->g_w = (tree + obj)->ob_width;
  97.     p->g_h = (tree + obj)->ob_height;
  98.     }
  99.  
  100. /*------------------------------*/
  101. /*    disp_obj        */
  102. /*------------------------------*/
  103.     VOID
  104. disp_obj(tree, obj)
  105.     OBJECT    *tree;
  106.     WORD    obj;
  107.     {
  108.     GRECT    box;
  109.  
  110.     objc_xywh(tree, obj, &box);
  111.     objc_draw(tree, ROOT, MAX_DEPTH, box.g_x, box.g_y,
  112.         box.g_w, box.g_h);
  113.     }
  114.  
  115. /*------------------------------*/
  116. /*    selected        */
  117. /*------------------------------*/
  118.     WORD
  119. selected(tree, obj)
  120.     OBJECT    *tree;
  121.     WORD    obj;
  122.     {
  123.     return (SELECTED & (tree + obj)->ob_state)? TRUE: FALSE;
  124.     }
  125.  
  126. /*------------------------------*/
  127. /*    map_tree        */
  128. /*------------------------------*/
  129.         VOID
  130. map_tree(tree, this, last, routine)
  131.         OBJECT          *tree;
  132.         WORD            this, last;
  133.         WORD            (*routine)();
  134.         {
  135.         WORD            tmp1;
  136.  
  137.         tmp1 = this;            /* Initialize to impossible value: */
  138.                                 /* TAIL won't point to self!       */
  139.                                 /* Look until final node, or off   */
  140.                                 /* the end of tree                 */ 
  141.         while (this != last && this != NIL)
  142.                                 /* Did we 'pop' into this node     */
  143.                                 /* for the second time?            */
  144.                 if ((tree + this)->ob_tail != tmp1)
  145.                         {
  146.                         tmp1 = this;    /* This is a new node       */
  147.                         this = NIL;
  148.                                         /* Apply operation, testing  */
  149.                                         /* for rejection of sub-tree */
  150.                         if ((*routine)(tree, tmp1))
  151.                                 this = (tree + tmp1)->ob_head;
  152.                                         /* Subtree path not taken,   */
  153.                                         /* so traverse right         */ 
  154.                         if (this == NIL)
  155.                                 this = (tree + tmp1)->ob_next;
  156.                         }
  157.                 else                    /* Revisiting parent:        */
  158.                                         /* No operation, move right  */
  159.                         {
  160.                         tmp1 = this;
  161.                         this = (tree + tmp1)->ob_next;
  162.                         }
  163.         }
  164.  
  165. /*------------------------------*/
  166. /*    hndl_dial        */
  167. /*------------------------------*/
  168.     VOID
  169. hndl_dial(tree, def, x, y, w, h)
  170.     OBJECT    *tree;
  171.     WORD    def;
  172.     WORD    x, y, w, h;
  173.     {
  174.     WORD    xdial, ydial, wdial, hdial, exitobj;
  175.     UWORD    xtype;
  176.  
  177.     form_center(tree, &xdial, &ydial, &wdial, &hdial);
  178.     form_dial(0, x, y, w, h, xdial, ydial, wdial, hdial);
  179.     form_dial(1, x, y, w, h, xdial, ydial, wdial, hdial);
  180.     objc_draw(tree, ROOT, MAX_DEPTH, xdial, ydial, wdial, hdial);
  181.     exitobj = form_do(tree, def) & 0x7FFF;
  182.     form_dial(2, x, y, w, h, xdial, ydial, wdial, hdial);
  183.     form_dial(3, x, y, w, h, xdial, ydial, wdial, hdial);
  184.     return (exitobj);
  185.     }
  186.  
  187. /*------------------------------*/
  188. /*    set_text         */
  189. /*------------------------------*/
  190.     VOID
  191. set_text(tree, obj, str, len)
  192.     OBJECT    *tree;
  193.     BYTE    *str;
  194.     WORD    obj, len;
  195.     {
  196.     TEDINFO    *obspec;
  197.  
  198.     obspec = (TEDINFO *) (tree + obj)->ob_spec;
  199.     obspec->te_ptext = str;
  200.     obspec->te_txtlen = len;
  201.     }
  202.  
  203. /*------------------------------*/
  204. /*    beg_prog         */
  205. /*------------------------------*/
  206.     VOID
  207. beg_prog(rect)
  208.     GRECT    *rect;
  209.     {
  210.     OBJECT    *tree;
  211.     WORD    xdial, ydial, wdial, hdial;
  212.  
  213.     rsrc_gaddr(R_TREE, PROGRESS, &tree);
  214.     form_center(tree, &rect->g_x, &rect->g_y, &rect->g_w, &rect->g_h);
  215.     form_dial(0, 0, 0, 0, 0, rect->g_x, rect->g_y, 
  216.         rect->g_w, rect->g_h);
  217.     objc_draw(tree, ROOT, MAX_DEPTH, rect->g_x, rect->g_y, 
  218.         rect->g_w, rect->g_h);
  219.     }
  220.  
  221. /*------------------------------*/
  222. /*    end_prog         */
  223. /*------------------------------*/
  224.     VOID
  225. end_prog(rect)
  226.     GRECT    *rect;
  227.     {
  228.     form_dial(3, 0, 0, 0, 0, rect->g_x, rect->g_y, rect->g_w, rect->g_h);
  229.     }
  230.  
  231. /*------------------------------*/
  232. /*    set_prog         */
  233. /*------------------------------*/
  234.     VOID
  235. set_prog(strno)
  236.     UWORD    strno;
  237.     {
  238.     OBJECT    *tree;
  239.     BYTE    *saddr;
  240.  
  241.     rsrc_gaddr(R_TREE, STRINGS, &tree);
  242.     saddr = (BYTE *) (tree + strno)->ob_spec;
  243.     rsrc_gaddr(R_TREE, PROGRESS, &tree);
  244.     set_text(tree, PLINE, saddr);
  245.     disp_obj(tree, PLINE);
  246.     }
  247.  
  248.